package com.itheima.d5_xml;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

//目标：掌握使用dom4j解析xml文件的api
public class Demo02 {
    public static void main(String[] args) throws Exception {
        /**
         * dom4j获取解析器、Document文档、根标签对象的API：
         *      public SAXReader()：创建Dom4j的解析器对象
         *      Document read(String url)：加载xml文件成为Document对象
         *      Element getRootElement()：获得根元素对象
         *
         * dom4j解析xml标签、属性、文本的API：
         *      List<Element> elements()：得到当前元素下所有子元素
         *      List<Element> elements(String name)：得到当前元素下指定名字的子元素返回集合
         *      Element element(String name)：得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
         *      String getName()：得到元素名字
         *      String  attributeValue(String name)：通过属性名直接得到属性值
         *      String elementText(子元素名)：得到指定名称的子元素的文本
         *      String getText()：得到文本
         */

        //1.需求：获取contacts.xml文件的Document对象，并获取其中根标签对象
        SAXReader reader = new SAXReader();
        Document doc = reader.read("day11-thread&single&enum&xml\\resources\\xml\\contacts.xml");
        //System.out.println(doc);
        Element rootElement = doc.getRootElement();
        //System.out.println(rootElement);

        //2.需求：获取根标签下面所有的子标签对象
        List<Element> rootElements = rootElement.elements();
        for (Element element : rootElements) {
            System.out.println(element);
        }
        System.out.println("--------------------");

        //3.需求：获取根标签下面名字是"contact"的子标签
        List<Element> contactElements = rootElement.elements("contact");
        for (Element element : contactElements) {
            System.out.println(element);
        }
        System.out.println("--------------------");

        //4.需求：获取跟标签下名字是"contact"的标签，只获取一个
        Element contactElement = rootElement.element("contact");
        System.out.println(contactElement);
        System.out.println("--------------------");

        //5.需求：获取contactElement标签的名字
        String name = contactElement.getName();
        System.out.println(name);
        System.out.println("--------------------");

        //6.需求：获取contactElement标签的id属性的值
        String id = contactElement.attributeValue("id");
        System.out.println(id);
        System.out.println("--------------------");

        //7.需求：获取第一个contact标签下，name标签的文本
        String nameText = contactElement.elementText("name");
        System.out.println(nameText);
        System.out.println("--------------------");

        //8.需求：直接通过name标签对象，获取它的文本
        Element nameElement = contactElement.element("name");
        String text = nameElement.getText();
        System.out.println(text);
    }
}
